/**     
 * @Title: ConsoleWebSocket.java   
 * @Package me.xxy.mq.demo.servlet   
 * @Description: TODO
 * @author weiwei 
 * @date 2018年5月30日 下午5:44:54   
 * @version V1.0     
 */
package me.xxy.mq.demo.servlet;

import java.io.IOException;

import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

/**
 * @ClassName: ConsoleWebSocket
 * @Description: 将控制台信息输出到前端的websocket
 * @author weiwei
 * @date 2018年5月30日 下午5:44:54
 */
// 该注解用来指定一个URI，客户端可以通过这个URI来连接到WebSocket。类似Servlet的注解mapping。无需在web.xml中配置。
@ServerEndpoint("/websocket")
public class ConsoleWebSocket {

	// 与某个客户端的连接会话，需要通过它来给客户端发送数据
	private Session session;

	public static ConsoleWebSocket socket;

	/**
	 * @Title: onOpen
	 * @Description: 连接建立成功调用的方法
	 * @param session
	 *            可选的参数。session为与某个客户端的连接会话，需要通过它来给客户端发送数据
	 * @Reutrn void
	 */
	@OnOpen
	public void onOpen(Session session) {
		this.session = session;
		socket = this;
		sendMessage("连接控制台成功");
	}

	/**
	 * 连接关闭调用的方法
	 */
	@OnClose
	public void onClose() {
	}

	/**
	* @Title: onMessage   
	* @Description: 收到客户端消息后调用的方法
	* @param message 客户端发送过来的消息
	* @param session 可选的参数
	* @Reutrn void
	 */
	@OnMessage
	public void onMessage(String message, Session session) {
		System.out.println("来自客户端的消息:" + message);
	}

	/**
	* @Title: onError   
	* @Description: 发生错误时调用
	* @param session
	* @param error
	* @Reutrn void
	 */
	@OnError
	public void onError(Session session, Throwable error) {
		System.out.println("发生错误");
		error.printStackTrace();
	}

	/**
	* @Title: sendMessage   
	* @Description: 这个方法与上面几个方法不一样。没有用注解，是根据自己需要添加的方法。
	* @param message
	* @Reutrn void
	 */
	public void sendMessage(String message) {
		try {
			this.session.getBasicRemote().sendText(message);
		} catch (Exception e) {
			System.out.println("发送消息失败");
		}
	}

}
